// appFunctionIndexer: 列出指定目录下每个子目录的文件名（不含扩展名）
// 返回结构：[{ appName: 目录名称, supportFunction: [文件名, ...] }, ...]
// 优先使用 Electron 预加载暴露的 window.electronFileAPI / window.electronSettingsAPI。
// 当不可用时（开发或测试环境），在 Node 集成打开的情况下尝试使用 fs 作为降级方案。

function stripExt(name) {
  const idx = name.lastIndexOf('.')
  return idx > 0 ? name.slice(0, idx) : name
}

function isHidden(name) {
  const lower = name.toLowerCase()
  return (
    name.startsWith('.') ||
    lower.endsWith('.tmp') ||
    lower.startsWith('~$')
  )
}

// async function readDirViaElectron(relPath = '.') {
//   if (!window.electronFileAPI || typeof window.electronFileAPI.readDir !== 'function') {
//     return { success: false, error: 'electronFileAPI 未注入' }
//   }
//   try {
//     const res = await window.electronFileAPI.readDir(relPath)
//     return res
//   } catch (err) {
//     return { success: false, error: err && err.message ? err.message : String(err) }
//   }
// }

// async function withWorkRoot(tempRootDir, fn) {
//   const settings = window.electronSettingsAPI
//   if (!settings || typeof settings.getWorkDirs !== 'function' || typeof settings.setWorkDirs !== 'function') {
//     return await fn()
//   }
//   const original = await settings.getWorkDirs().catch(() => [])
//   const needSwitch = !(Array.isArray(original) && original[0] === tempRootDir)
//   try {
//     if (needSwitch) await settings.setWorkDirs([tempRootDir])
//     return await fn()
//   } finally {
//     if (needSwitch && Array.isArray(original)) {
//       try { await settings.setWorkDirs(original) } catch (_) { /* ignore */ }
//     }
//   }
// }

export async function listAppSupportFunctions() {
  // 优先：使用主进程模板 API，固定读取项目根目录/template
  if (window.electronTemplateAPI) {
    const res = await window.electronTemplateAPI.listCategories()
    const categories = (res && res.success && Array.isArray(res.categories)) ? res.categories : []
    const result = []
    for (const cat of categories) {
      const tRes = await window.electronTemplateAPI.listTemplates(cat)
      const files = (tRes && tRes.success && Array.isArray(tRes.templates)) ? tRes.templates : []
      const names = files.filter((n) => !isHidden(n)).map(stripExt)
      result.push({ appName: cat, supportFunction: names })
    }
    return result
  }

  // 回退：在允许 Node 集成时，直接读取 process.cwd()/template
  try {
    const path = window.require ? window.require('path') : null
    const fs = window.require ? window.require('fs') : null
    const proc = window.require ? window.require('process') : null
    if (!fs || !path || !proc) throw new Error('无法读取模板目录')

    const TEMPLATE_ROOT = path.join(proc.cwd(), 'template')
    const entries = await fs.promises.readdir(TEMPLATE_ROOT, { withFileTypes: true })
    const result = []
    for (const e of entries) {
      if (!e.isDirectory() || isHidden(e.name)) continue
      const subDir = path.join(TEMPLATE_ROOT, e.name)
      let files = []
      try {
        const sub = await fs.promises.readdir(subDir, { withFileTypes: true })
        files = sub.filter(s => s.isFile() && !isHidden(s.name)).map(s => stripExt(s.name))
      } catch (_) { files = [] }
      result.push({ appName: e.name, supportFunction: files })
    }
    return result
  } catch (err) {
    throw new Error(err && err.message ? err.message : '无法读取模板目录')
  }
}

export default { listAppSupportFunctions }



